import Mock from 'mockjs'
import queryString from 'querystring'
import dayjs from 'dayjs'
import {songFun} from '@/utils/index'
// 拓展功能 电话号码
Mock.Random.extend({
    phone() {
        // 自己随便写前缀
        const phonePrefixs = ['135', '189', '136']
        // 使用pick 随机返回前缀
        return this.pick(phonePrefixs) + Mock.mock(/\d{8}/)
    },
    gdname() {
        const namePrefixs = ['牛肉', '羊肉', '猪肉', '带鱼', '龙虾', '豆芽', '豆腐']
        return this.pick(namePrefixs)
    },
    ctagory() {
        const cotys = ['膨化食品', '油炸食品', '火锅', '辣条', '炸鸡', '汉堡', '鸡锁骨']
        return this.pick(cotys)
    }
})
// 数据
const servesList = Mock.mock({
    'datas|22': [{
        'id|+1': 1,
        'goodscode|+6': 10189,
        goodsname: '@gdname',
        goodsprice: '@integer(2,100)',
        goodscategory: '@ctitle(4,5)',
        addtime: '@datetime(2024/MM/dd)',
        buypoint: '@ctitle(5,7)',
        goodsdiscrip: '<p>@ctitle(10,60)</p>'
    }],
})
// 对表格数据分页
const getSelectList = (data, pageNum, pageSize) => {
    console.log('isArr22', data);
    let kshi = Math.ceil(((pageNum - 1) * pageSize).toFixed(0))
    let jshu = Math.ceil((kshi + pageSize).toFixed(2))
    const list = data.slice(kshi >= 0 ? kshi : 0, jshu)
    return list
}
let serveData = servesList.datas

/** 
 * 按钮查询 和 页面加载用的是同一个接口
 * 必传 pageNum pagesize 
 * 非必传 goodsname   addtime
 * **/
Mock.mock(/\/mock\/portList/, 'get', ({ url }) => {
    console.log('url555555', url)
    /**
     * 知识点：如何获取/mock/tables/list?phones=18756254856&pages=1 中 'phones' 的值 , 
     * 使用 queryString.parse() 将 phones=18756254856&pages=1 转成 { phones：18756254856 ，pages：1 }
     * **/
    let afterObj = queryString.parse(url.split('?')[1])  // {pagesize:10 , pagenumb:1}
    const { pagesize, pagenumb, ...newObj } = afterObj  // newObj新对象 是去除了 pagenumb pagesize 两个属性之后的 
    console.log(pagesize, pagenumb);
    if (songFun.isEmpty(newObj)) {   // 页面初始加载 或是 重置以后点击查询
        let aftData = getSelectList(serveData, Number(afterObj.pagenumb), Number(afterObj.pagesize))
        return {
            code: 200,
            message: 'success',
            total: serveData.length,
            pagesize: afterObj.pagesize,
            pagenumb: afterObj.pagenumb,
            datas: aftData
        }
    } else {        // 带其他查询条件 点击查询 按钮
        let queryData = serveData.filter(val => val.goodsname == afterObj.goodsname || val.addtime == dayjs(afterObj.addtime).format('YYYY/MM/DD'))
        let aftData = getSelectList(queryData, Number(afterObj.pagenumb), Number(afterObj.pagesize))
        return {
            code: 200,
            message: 'success',
            total: queryData.length,
            pagesize: afterObj.pagesize,
            pagenumb: afterObj.pagenumb,
            datas: aftData
        }
    }
})
// 商品添加接口
Mock.mock(/\/mock\/addprod/, 'post', ({ body }) => {
    let addObj = { ...JSON.parse(body), ...{ id: Math.ceil(Math.random() * 10000), addtime: dayjs().format('YYYY-MM-DD'), goodscode: Math.ceil(Math.random() * 10000) } }
    serveData.unshift(addObj)
    console.log('serveData', serveData);
    return {
        code: 200,
        message: '添加商品成功'
    }
})
// 删除接口  根据id找到位置，再根据位置删除该项 
Mock.mock(/\/mock\/delets/, 'get', ({ url }) => {
    console.log('url', url);
    let urlObj = queryString.parse(url.split('?')[1])
    let idsArry = urlObj.ids.split(',')
    idsArry.forEach(item => {
        let index = serveData.findIndex(jk => item == jk.id)
        serveData.splice(index, 1)
    })
    console.log('serveData', serveData);
    return {
        code: 200,
        message: 'success',
        datas: serveData
    }
})
// 商品类型查询接口 添加商品页面， 根据 type=cid 查询第二层的数据，不传则返回第一层所有数据
let typeList = Mock.mock({
    'datas': [
        { 'id': 1, 'name': '膨化食品', 'cid': 1001, 'type': 1 },
        { 'id': 2, 'name': '油炸食品', 'cid': 1002, 'type': 1 },
        { 'id': 3, 'name': '火锅', 'cid': 1003, 'type': 1 },
        { 'id': 4, 'name': '虾条', 'cid': 10001, 'type': 1001 },
        { 'id': 5, 'name': '薯片', 'cid': 10002, 'type': 1001 },
        { 'id': 6, 'name': '炸鸡', 'cid': 10021, 'type': 1002 },
        { 'id': 7, 'name': '鸡锁骨', 'cid': 10022, 'type': 1002 },
        { 'id': 8, 'name': '鸳鸯锅', 'cid': 10031, 'type': 1003 }
    ]
})
Mock.mock(/\/mock\/prodType/, 'get', () => {
    return {
        code: 200,
        message: 'success',
        ...typeList
    }

})
// 编辑后 提交的接口
Mock.mock(/\/mock\/editor/, 'post', ({ body }) => {
    let obj = JSON.parse(body)
    let index = serveData.findIndex(item => item.id == obj.id)
    serveData.splice(index, 1, obj)
    return {
        code: 200,
        message: '修改成功!',
    }
})
// 产品分类 节点数据接口
const ctgory = Mock.mock({
    'datas': [
        { 'id': 1, 'name': '膨化食品', 'cid': 1001, 'type': 1 },
        { 'id': 2, 'name': '油炸食品', 'cid': 1002, 'type': 1 },
        { 'id': 3, 'name': '火锅', 'cid': 1003, 'type': 1 },
        { 'id': 4, 'name': '虾条', 'cid': 10001, 'type': 1001 },
        { 'id': 5, 'name': '薯片', 'cid': 10002, 'type': 1001 },
        { 'id': 6, 'name': '炸鸡', 'cid': 10021, 'type': 1002 },
        { 'id': 7, 'name': '鸡锁骨', 'cid': 10022, 'type': 1002 },
        { 'id': 8, 'name': '鸳鸯锅', 'cid': 10031, 'type': 1003 }
    ]
})
let afterDatas = ctgory.datas
typeList.datas = afterDatas
// 查询
Mock.mock(/\/mock\/category-nodes/, 'get', () => {
    return {
        code: 200,
        message: 'success',
        ...ctgory
    }
})
// 新增二级节点数据
Mock.mock(/\/mock\/chang-nodes/, 'post', ({ body }) => {
    body = JSON.parse(body)
    let obj = { 'id': Math.ceil(Math.random() * 1000), 'name': body.name, 'cid': Math.ceil(Math.random() * 2000), 'type': Number(body.cid) }
    afterDatas.push(obj)
    typeList.datas = afterDatas
    return {
        code: 200,
        message: '新增成功'
    }
})
// 编辑
Mock.mock(/\/mock\/node-edit/, 'post', ({ body }) => {
    console.log('body', body);
    body = JSON.parse(body)
    let index = afterDatas.findIndex(item => item.cid == body.cid)
    afterDatas[index].name = body.name
    typeList.datas = afterDatas
    return {
        code: 200,
        message: '编辑成功'
    }
})
// 删除
Mock.mock(/\/mock\/node-delet/, 'post', ({ body }) => {
    body = JSON.parse(body)
    let index = afterDatas.findIndex(item => item.cid == body.cid)
    afterDatas.splice(index, 1)
    typeList.datas = afterDatas
    return {
        code: 200,
        message: 'success'
    }
})
// 新增一级节点数据
Mock.mock(/\/mock\/add-one-nodes/, 'post', ({ body }) => {
    body = JSON.parse(body)
    let obj = { 'id': Math.ceil(Math.random() * 1000), 'name': body.name, 'cid': Math.ceil(Math.random() * 2000), 'type': 1 }
    afterDatas.push(obj)
    typeList.datas = afterDatas
    return {
        code: 200,
        message: 'success',
    }
})